package atguigu.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;
@PropertySource("classpath:dbconfig.properties")
public class JdbcConfig {

    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.user}")
    private String user;
    @Value("${jdbc.password}")
    private String password;

    /**
     * 定义方法，取代配置文件的中QueryRunner对象
     * 注解：@Bean 可以将方法的返回值对象，放在SpringIOC容器
     * 利用方法的参数传递形式，传递连接池对象
     * 方法的参数添加注解 @Qualifier,区分对象的唯一性
     *   如果方法的参数只有1个，可以不写@Qualifier
     */
    @Bean
    public QueryRunner createQueryRunner(@Qualifier("dataSource") DataSource dataSource){
        //QueryRunner构造方法，传递DataSource接口实现类，连接池对象
        QueryRunner qr = new QueryRunner(dataSource);
        return qr;
    }

    /*@Bean("qr2")
    public QueryRunner createQueryRunner2(@Qualifier("dataSource") DataSource dataSource){
        //QueryRunner构造方法，传递DataSource接口实现类，连接池对象
        QueryRunner qr = new QueryRunner();
        return qr;
    }*/
    /**
     * 定义方法，取代配置文件中的德鲁伊连接池配置
     * 返回连接池接口DataSource实现类对象
     * 配置文件，bean标签，将配置好的对象，放在SpringIOC容器
     * 注解：@Bean 可以将方法的返回值对象，放在SpringIOC容器
     * @Bean注解属性： value，配置对象的唯一id属性
     */
    @Bean("dataSource")
    public DataSource createDataSource(){
        //德鲁伊连接池对象
        DruidDataSource dataSource = new DruidDataSource();
        //dataSource对象的方法Set方法，设置数据库连接信息
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }
}
